package com.explment.lens.utils.generator;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

/**
 * 简单的代码生成，不需用时候可注释掉
 */
public class CodeGenerator {
    /*public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/guns", "root", "123456")
                .globalConfig(builder -> {
                    builder.author("admin")
                            .enableSwagger()
                            .outputDir(System.getProperty("user.dir") + "/src/main/java");
                })
                .packageConfig(builder -> {
                    builder.parent("com.explment.lens")
                            //.moduleName("system")
                            .entity("entity")
                            .mapper("mapper")
                            .service("service")
                            .controller("controller")
                            .serviceImpl("service.impl")
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/src/main/resources/mapper"));
                })
                .strategyConfig(builder -> {
                   //需要生成代码的表
                   // builder.addInclude("flyway_schema_history,sys_app,sys_area,sys_click_count,sys_click_status,sys_config,sys_database_info,sys_dict,sys_dict_type,sys_file_business,sys_file_info,sys_file_storage,sys_group,sys_hr_org_approver,sys_hr_organization,sys_hr_position,sys_log_api,sys_log_business,sys_log_business_content,sys_log_security,sys_login_log,sys_menu,sys_menu_options,sys_message,sys_notice,sys_portal_user_app,sys_resource,sys_role,sys_role_data_scope,sys_role_limit,sys_role_menu,sys_role_menu_options,sys_sms,sys_table_width,sys_theme,sys_theme_template,sys_theme_template_field,sys_theme_template_rel,sys_timers,sys_toc_customer,sys_translation,sys_user,sys_user_certificate,sys_user_data_scope,sys_user_group,sys_user_group_detail,sys_user_org,sys_user_password_record,sys_user_role")
                            .entityBuilder()
                            .enableTableFieldAnnotation()  // 启用字段注解
                            .formatFileName("%sEntity")  // 实体类命名规则
                            .enableFileOverride()  // 覆盖已生成的文件
                            .enableLombok()
                            .enableTableFieldAnnotation() // 启用字段注解
                            .enableChainModel()
                            .serviceBuilder()
                            .formatServiceFileName("%sService")  // Service命名规则
                            .formatServiceImplFileName("%sServiceImpl")  // Service实现类命名规则
                            .enableFileOverride()  // 覆盖已生成的文件
                            .mapperBuilder()
                            .formatMapperFileName("%sMapper")  // Mapper命名规则
                            .formatXmlFileName("%sMapper")  // Mapper XML命名规则
                            .enableFileOverride()  // 覆盖已生成的文件
                            .enableMapperAnnotation()  // 关键配置1
                            .enableBaseResultMap()    // 关键配置2
                            .enableBaseColumnList()   // 关键配置3
                            .controllerBuilder()
                            .formatFileName("%sController")  // 控制器命名规则
                            .enableFileOverride()  // 覆盖已生成的文件
                            .enableRestStyle();
                })
                .templateConfig(builder -> {
                    //builder.controller("/templates/controller.java");  // 使用自定义模板
                    //builder.entity("/templates/entity.java");  // 使用自定义模板
                    //builder.service("/templates/service.java");  // 使用自定义模板
                    //builder.serviceImpl("/templates/serviceImpl.java");  // 使用自定义模板
                    //builder.mapper("/templates/mapper.java");  // 使用自定义模板
                    //builder.xml("/templates/mapper.xml");  // 使用自定义模板
                    builder.controller("/templates/custom/controller.java")
                            .entity("/templates/custom/entity.java")
                            .service("/templates/custom/service.java")
                            .serviceImpl("/templates/custom/serviceImpl.java")
                            .mapper("/templates/custom/mapper.java")
                            .xml("/templates/custom/mapper.xml");

                })
                .injectionConfig(builder -> {
                    builder.beforeOutputFile((tableInfo, objectMap) -> {
                        objectMap.put("controllerMappingHyphen",
                                StringUtils.camelToHyphen(tableInfo.getEntityPath()));
                    });
                })
                //.templateEngine(new FreemarkerTemplateEngine())
                .templateEngine(new VelocityTemplateEngine())
                .execute();
    }*/
}
